/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.MembresiaDataManager;
import com.ec.socialfun.entidades.Usuario;
import com.ec.socialfun.enumeradores.EstadoEnum;
import com.ec.socialfun.excepciones.RegistroMembresiaException;
import com.ec.socialfun.servicios.LocalesFacade;
import com.ec.socialfun.servicios.MembresiaFacade;
import com.ec.socialfun.servicios.UsuarioFacade;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIForm;
import org.jboss.logging.Logger;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author DESARROLLO
 */
@ManagedBean
@RequestScoped
public class MembresiaControlador extends PadreControlador {
    private static final Logger LOG = Logger.getLogger(MembresiaControlador.class.getName());
    @EJB
    private MembresiaFacade membresiaFacade;
    @EJB
    private UsuarioFacade usuarioFacade;
    @EJB
    private LocalesFacade localFacade;
    @ManagedProperty(value = "#{membresiaDataManager}")
    private MembresiaDataManager membresiaDataManager;
    
    private Usuario usuario;
    
    private UIForm formularioMembresia;
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public UIForm getFormularioMembresia() {
        String parametro = obtenerParametro("id");
        if(parametro != null)
        {
            LOG.info("PARAMETRO "+parametro);
            getMembresiaDataManager().setLocal(localFacade.recuperarPorCodigo(Integer.parseInt(parametro)));
            botonAceptar();
            linkDesactivar();
            LOG.info("LOCAL"+getMembresiaDataManager().getLocal().getLoDescripcion());
            
        }
        return formularioMembresia;
    }

    public void setFormularioMembresia(UIForm formularioMembresia) {
        this.formularioMembresia = formularioMembresia;
    }
    
    public void registrarMembresia() throws RegistroMembresiaException{
        
        LOG.info("local"+getMembresiaDataManager().getLocal().getLoCodigo());
        this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        LOG.info("usuario"+usuario.getUsNombre());
        if(membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            LOG.info("CREACION DE MEMBRESIA");
            membresiaFacade.registrarMembresia(usuario, getMembresiaDataManager().getLocal());
            this.mensajeExitoso("Membresía Creada Exitosamente");
        }
        else
        {
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.INACTIVO.getCodigo()))
            {
                membresiaFacade.reactivarMembresia(membresiaFacade.recuperarMembresia(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()));
                LOG.info("membresia reactivada");
                this.mensajeExitoso("Membresía Reactivada Exitosamente");
            }
            else
            {
               LOG.info("MEMBRESIA YA EXISTE"+membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()));
                this.mensajeError("Membresía ya existe"); 
            }
        }
        botonAceptar();
        linkDesactivar();
    }
    
    public void desactivarMembresia() throws RegistroMembresiaException
    {
        this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        if(!membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            LOG.info("Desactivar Membresía");
            membresiaFacade.desactivarMembresia(membresiaFacade.recuperarMembresia(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()));
            this.mensajeExitoso("Membresía Desactivada Exitosamente");
        }
        else
        {
            LOG.info("Membresia no existe");
            this.mensajeError("Membresía no existe");
        }   
        botonAceptar();
        linkDesactivar();
    }
    
    /**
     * verifica si existe membresia o no
     */
    public void botonAceptar()
    {
        this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        LOG.info("BOTON ACTIVAR");
        if(membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            // muestra boton aceptar
            getMembresiaDataManager().setBanderaAceptar(true);
            
            
        }
        else
        {
            // si existe la membresia
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.INACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaAceptar(true);
            }
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.ACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaAceptar(false);
            }
        }
    }
    
    public void linkDesactivar()
    {
        this.usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
        LOG.info("LINK DESACTIVAR");
        if(!membresiaFacade.noExisteMembresias(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()))
        {
            // si existe la membresia
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.ACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaLink(true);
            }
            if(membresiaFacade.recuperarEstado(usuario.getUsCodigo(),getMembresiaDataManager().getLocal().getLoCodigo()).equals(EstadoEnum.INACTIVO.getCodigo()))
            {
                getMembresiaDataManager().setBanderaLink(false);
            }
        }
        else
        {
            // no existe 
            getMembresiaDataManager().setBanderaLink(false);
        }
    }
    
    public StreamedContent getArchivoDescargaTerminosYCondiciones() {
        LOG.info("getArchivoDescargaTerminosYCondiciones");
        if (isTerminosYCondicionesCargados()) {
            byte[] arch = getMembresiaDataManager().getLocal().getLoTerminos();
            InputStream iestream = new ByteArrayInputStream(arch);
            return new DefaultStreamedContent(iestream, "application/pdf", "terminos_y_condiciones.pdf");
        }
        return null;
    }
    
    public boolean isTerminosYCondicionesCargados() {
        if (getMembresiaDataManager().getLocal().getLoTerminos() == null
                || getMembresiaDataManager().getLocal().getLoTerminos().length == 0) {
            return false;
        }
        return true;
    }
    
    public MembresiaControlador() {
    }

    @Override
    public void iniciarDatos() { 
    }
    
    public MembresiaDataManager getMembresiaDataManager() {
        return membresiaDataManager;
    }

    public void setMembresiaDataManager(MembresiaDataManager membresiaDataManager) {
        this.membresiaDataManager = membresiaDataManager;
    }
    
    
}
